<?php

	session_start();
	require_once("../lib/Conexao.php");
	require_once("../lib/CONFIG.php");
	        
   	class Login{
                        
    	var $conexao;
                
       	public function Login(){
        	$con            = new Conexao();
            $this->conexao  = $con->conexao;
        }
        
		
		public function validaUsuario($dadosObj){
        	$retorno = array();
			
			$validaCampos = $this->validaCampos($dadosObj);
			if(isset($validaCampos["erro"])){
				$retorno["erro"] = $validaCampos["erro"];
				return $retorno; 
			}
			
			$usuario  = $this->isValido($dadosObj);
			if(isset($usuario["erro"])){
				$retorno["erro"] = $usuario["erro"];
				return $retorno; 
			}
			   			
			return $retorno;
        }
		
		private function isValido($dadosObj){
			$retorno = array();
			
			$senha   = md5($dadosObj->senha);
		
			
			$sql =  "SELECT
					 		id,
					 		perfil_id,
					 		nome,
					 		email,
					 	    login,
					 		senha,
					 		excluido,
					 		ativo
					FROM
					      usuario      
					WHERE
					     login = '{$dadosObj->login}'
					AND
					     senha = '{$senha}'";
			
			$res = $this->conexao->Execute($sql);
			
			if(!$res){
				$retorno["erro"] = "Erro ao validar usuário!";
				return $retorno;
			}
			
			if($res->RecordCount()){
				
				
				if($res->fields["excluido"] == 'S'){
					$retorno["erro"] = "O registro do usuário foi excluido!";
					return $retorno;
				}
				
				if($res->fields["ativo"] == 'N'){
					$retorno["erro"] = "Registro do usuário está desativado!";
					return $retorno;
				}
				
				$usuarioObj    			 = array();
				$usuarioObj["id"]   	 = $res->fields["id"];
				$usuarioObj["idPerfil"]	 = $res->fields["perfil_id"];
				$usuarioObj["nome"]      = utf8_encode($res->fields["nome"]);
				$usuarioObj["email"]     = $res->fields["email"];
				$usuarioObj["login"]     = utf8_encode($res->fields["login"]);
 				
				
				$modulos  = $this->getModulo($usuarioObj);
				if(isset($modulos["erro"])){
					$retorno["erro"] = $modulos["erro"];
					return $retorno;
				}
				
				$usuarioObj["modulos"]   = $modulos["modulos"];
				
				$_SESSION[SESSION_SISTEMA]["sDadosUsuario"] =  serialize($usuarioObj); 
				
				$retorno["usuarioObj"] = $usuarioObj;		
			}else{
				$retorno["erro"] = "Usuário ou Senha inválidos!";	
			}
	
			return $retorno;
		}
		
		
		private function getModulo($usuarioObj){
			$retorno          =  array();
			$modulosLiberados =  array();
			
			/* 
			 * INICIO
			 * CARREGA OS MODULOS POR PERFIL
			 */ 
			
			$sql = "SELECT
					     m.id as idModulo,
					     m.descricao as descModulo,
					     m.link		 as linkModulo
					FROM
						  perfil p,
						  modulo m,
						  modulo_perfil mp
					WHERE
					     p.excluido = 'N'
					AND
					     mp.perfil_id = p.id
					AND
						 m.id = mp.modulo_id
					AND
					     p.id       = {$usuarioObj["idPerfil"]}";
								     
			$res = $this->conexao->Execute($sql);
			
			if(!$res){
				$retorno["erro"] = "Erro ao buscar módulos para o perfil do usuário!";
				return $retorno;
			}
			
			if($res->RecordCount()){
				while(!$res->EOF){
					
					$modulosLiberados[$res->fields["idModulo"]]["idModulo"] 	=  $res->fields["idModulo"];
					$modulosLiberados[$res->fields["idModulo"]]["descModulo"] 	=  $res->fields["descModulo"]; 
					$modulosLiberados[$res->fields["idModulo"]]["linkModulo"] 	=  $res->fields["linkModulo"]; 
					
					
					$res->MoveNext();
				}
				
			}
			
			/* 
			 * - FIM
			 *   CARREGA OS MODULOS POR PERFIL
			 * 
			 */
			  
			
			/* 
			 * - INICIO
			 *   CARREGA OS MODULOS POR USUARIO
			 *  
			 */
			
			$sql  = "SELECT
							m.id 		as idModulo,
							m.descricao as descModulo,
							m.link		as linkModulo
					FROM 
							modulo m,
					        modulo_usuario mu
					WHERE 
							m.id = mu.modulo_id
					AND
					        mu.usuario_id = {$usuarioObj["id"]}";
										
			$res = $this->conexao->Execute($sql);
			
			if(!$res){
				$retorno["erro"] = "Erro ao buscar módulos por usuário!";
				return $retorno;
			}
			
			if($res->RecordCount()){
					
				while(!$res->EOF){
						
					$modulosLiberados[$res->fields["idModulo"]]["idModulo"] 	=  $res->fields["idModulo"];
					$modulosLiberados[$res->fields["idModulo"]]["descModulo"] 	=  $res->fields["descModulo"];
					$modulosLiberados[$res->fields["idModulo"]]["linkModulo"]	=  $res->fields["linkModulo"];
					$res->MoveNext();
				}
			}
			
			/*
			 * - FIM
			 *  CARREGA OS MODULOS POR USUARIO 
			 */ 
			
			
			if(count($modulosLiberados) == 0){
				$retorno["erro"] = "O usuário não possui módulos liberados!";
				return $retorno;
			}
			
			
			$retorno["modulos"]   = $modulosLiberados;
			return $retorno;
		}
		
		private function validaCampos($dadosObj){
			$retorno = array();
			
			if((!$dadosObj->senha) && (!$dadosObj->login) ){
				$retorno["erro"] = "Preencha os campos Login e Senha!";
			}else if(!$dadosObj->login){
				$retorno["erro"] = "Preencha o campo Login!";
			}else if(!$dadosObj->senha){
				$retorno["erro"] = "Preencha o campo Senha!";
			}
			
			return $retorno; 
		}
		
		
		public function verificaUsuario(){
			
			$retorno   			= array();
			$retorno["sessao"] 	= FALSE;
			  
			$usuarioObj = unserialize($_SESSION[SESSION_SISTEMA]["sDadosUsuario"]);
		
			if($usuarioObj["id"]){
				$retorno["sessao"] 	= TRUE;
			}

			return $retorno;
		}
				
    }
	                 
    $retorno  = array();
    $login    = new Login(); 
	        
	// PEGA OS DADOS ENVIADOS PELO JS
	$dados    = file_get_contents("php://input");
	$dadosObj = json_decode($dados);
	        
	switch($dadosObj->acao){
        case "validaUsuario":
                $retorno = $login->validaUsuario($dadosObj);                            
        break;
		case "verificaUsuario":
                $retorno = $login->verificaUsuario($dadosObj);                            
        break;
		case "logout":
                $retorno = $login->logout();                            
        break;
		           
	}
	
	$retorno  =  json_encode($retorno);
	echo $retorno;
?>